/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.entity.Clinica;
import br.com.sigodonto.model.entity.Servico;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@ViewScoped
public class GerenciarServicosMB implements Serializable {

    /**
     * Creates a new instance of GerenciarServicosMB
     */
    private Servico servico;
    private Servico servicoSelecionado;
    private Clinica clinica;
    private List<Servico> servicosTodos;
    private DaoGenerico daoGenerico;

    public GerenciarServicosMB() {
        this.servico = new Servico();
        this.servicoSelecionado = new Servico();
        this.daoGenerico = new DaoGenerico();
        this.servicosTodos = this.daoGenerico.listarTodos(Servico.class);
        this.carregarClinica();
    }

    public Servico getServico() {
        return servico;
    }

    public void setServico(Servico servico) {
        this.servico = servico;
    }

    public Servico getServicoSelecionado() {
        return servicoSelecionado;
    }

    public void setServicoSelecionado(Servico servicoSelecionado) {
        this.servicoSelecionado = servicoSelecionado;
    }

    public List<Servico> getServicosTodos() {
        return servicosTodos;
    }

    public void setServicosTodos(List<Servico> servicosTodos) {
        this.servicosTodos = servicosTodos;
    }

    public void salvarServico() {
        FacesMessage message = new FacesMessage();
        String msg = "SERVIÇO CADASTRADO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);
        boolean certo = false;

        if (this.servico.getId() == null) {
            if (this.clinica != null) {
                List<Servico> servicos = this.clinica.getServicos();
                servicos.add(servico);
                this.clinica.setServicos(servicos);
                certo = this.daoGenerico.salvar(this.clinica);
            } else {
                certo = this.daoGenerico.salvar(this.servico);
            }
        } else {
            if(this.daoGenerico.atualizar(this.servico) != null){
                certo = true;
            }
        }





        if (!certo) {
            msg = "ERRO AO CADASTRAR SERVIÇO!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        } else {
            this.servicosTodos = this.daoGenerico.listarTodos(Servico.class);
            this.servico = new Servico();
        }

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void excluirServico() {
        if (this.servicoSelecionado != null) {
            String msg = "SERVIÇO REMOVIDO COM SUCESSO!";
            FacesMessage message = new FacesMessage(msg);
            message.setSeverity(FacesMessage.SEVERITY_INFO);

            List<Servico> servicosClinica = this.clinica.getServicos();
            if (servicosClinica.contains(this.servicoSelecionado)) {
                servicosClinica.remove(this.servicoSelecionado);
            }
            boolean certo = true;

            if (this.daoGenerico.atualizar(this.clinica) == null) {
                certo = false;
            }

            if (certo) {
                certo = this.daoGenerico.remover(this.servicoSelecionado);
            }


            if (!certo) {
                msg = "ERRO AO REMOVER SERVIÇO!";
                message.setSummary(msg);
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
            } else {
                this.servicosTodos = this.daoGenerico.listarTodos(Servico.class);
            }

            FacesContext.getCurrentInstance().addMessage(null, message);

        }
    }

    public void atualizarServico() {
        if (this.servicoSelecionado != null) {
            this.servico = this.servicoSelecionado;
        }
    }

    private void carregarClinica() {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        HttpSession session = (HttpSession) externalContext.getSession(true);
        Clinica clinica1 = (Clinica) session.getAttribute("clinica");
        if (clinica1 != null) {
            this.clinica = clinica1;
        } else {
            this.clinica = new Clinica();
        }
    }
}
